package org.terramagnet.http.util;

/**
 * Simple validation methods. Designed for SDK internal use
 */
public final class Validate {

	private Validate() {
	}

	/**
	 * Validates that the object is not null
	 *
	 * @param obj object to test
	 */
	public static void notNull(Object obj) {
		if (obj == null) {
			throw new IllegalArgumentException("Object must not be null");
		}
	}

	/**
	 * Validates that the object is not null
	 *
	 * @param obj object to test
	 * @param msg message to output if validation fails
	 */
	public static void notNull(Object obj, String msg) {
		if (obj == null) {
			throw new IllegalArgumentException(msg);
		}
	}

	/**
	 * Validates that the value is true
	 *
	 * @param val object to test
	 */
	public static void isTrue(boolean val) {
		if (!val) {
			throw new IllegalArgumentException("Must be true");
		}
	}

	/**
	 * Validates that the value is true
	 *
	 * @param val object to test
	 * @param msg message to output if validation fails
	 */
	public static void isTrue(boolean val, String msg) {
		if (!val) {
			throw new IllegalArgumentException(msg);
		}
	}

	/**
	 * Validates that the value is false
	 *
	 * @param val object to test
	 */
	public static void isFalse(boolean val) {
		if (val) {
			throw new IllegalArgumentException("Must be false");
		}
	}

	/**
	 * Validates that the value is false
	 *
	 * @param val object to test
	 * @param msg message to output if validation fails
	 */
	public static void isFalse(boolean val, String msg) {
		if (val) {
			throw new IllegalArgumentException(msg);
		}
	}

	/**
	 * Validates that the array contains no null elements
	 *
	 * @param objects the array to test
	 */
	public static void noNullElements(Object[] objects) {
		noNullElements(objects, "Array must not contain any null objects");
	}

	/**
	 * Validates that the array contains no null elements
	 *
	 * @param objects the array to test
	 * @param msg message to output if validation fails
	 */
	public static void noNullElements(Object[] objects, String msg) {
		for (Object obj : objects) {
			if (obj == null) {
				throw new IllegalArgumentException(msg);
			}
		}
	}

	/**
	 * Validates that the string is not empty
	 *
	 * @param string the string to test
	 */
	public static void notEmpty(String string) {
		if (string == null || string.length() == 0) {
			throw new IllegalArgumentException("String must not be empty");
		}
	}

	/**
	 * Validates that the string is not empty
	 *
	 * @param string the string to test
	 * @param msg message to output if validation fails
	 */
	public static void notEmpty(String string, String msg) {
		if (string == null || string.length() == 0) {
			throw new IllegalArgumentException(msg);
		}
	}

	/**
	 * Cause a failure.
	 *
	 * @param msg message to output.
	 */
	public static void fail(String msg) {
		throw new IllegalArgumentException(msg);
	}
}
